package com.yq.bdm.controller.common;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ModelAttribute;

import com.alibaba.druid.util.StringUtils;

/**
 * Controller公共组件
 * 
 * @author shangpan
 * 
 * @date 2016年11月9日 下午9:42:26
 */
public abstract class AbstractController {

	protected Logger logger = LoggerFactory.getLogger(getClass());

	protected HttpServletRequest request;
	protected HttpServletResponse response;
	protected HttpSession session;

	// 分页有关的默认参数值，应该定义在Pager分页相关的对象类中
	private static final Integer LIMIT_DEFAULT = 10;
	private static final Integer CURRENT_PAGE_DEFAULT = 1;

	/**
	 * @author lizx
	 * @date 2017年2月16日下午3:43:11
	 */
	protected void getPage(Map<String, Object> map) {
		Integer page = getReqInt("currPage");
		Integer limit = 0;
		if (!map.containsKey("limit")) {
			limit = getReqInt("limit");
		} else {
			if (StringUtils.isNumber(map.get("limit").toString())) {
				limit = Integer.valueOf(map.get("limit").toString());
			} else {
				limit = 0;
			}
		}
		if (page == 0) {
			page = CURRENT_PAGE_DEFAULT;
		}
		if (limit == 0) {
			limit = LIMIT_DEFAULT;
		}
		map.put("offset", (page - 1) * limit);
		map.put("limit", limit);
		map.put("currPage", page);

	}

	/**
	 * @author lizx
	 * @date 2017年2月16日下午3:43:11
	 */
	public static void getPageStatic(Map<String, Object> map) {
		Integer page = 1;
		Integer limit = 0;

		if (StringUtils.isNumber(map.get("limit").toString())) {
			limit = Integer.valueOf(map.get("limit").toString());
		} else {
			limit = 0;
		}
		if (page == 0) {
			page = CURRENT_PAGE_DEFAULT;
		}
		if (limit == 0) {
			limit = LIMIT_DEFAULT;
		}
		map.put("offset", (page - 1) * limit);
		map.put("limit", limit);
		map.put("currPage", page);

	}

	/**
	 * 初始化请求时的request，response，session
	 * 
	 * @author lizx
	 * @date 2017年2月16日下午3:47:04
	 */
	@ModelAttribute
	public void setReqAndRes(HttpServletRequest request, HttpServletResponse response) {
		this.request = request;
		this.response = response;
		this.session = request.getSession();
	}

	protected void setSession(String key, Object obj) {
		session.setAttribute(key, obj);
	}

	protected void setRequest(String key, Object obj) {
		request.setAttribute(key, obj);
	}

	/**
	 * 获取请求参数 ， 返回类型为 String
	 * 
	 * @author lizx
	 * @date 2017年2月16日下午3:54:28
	 * @param arg0
	 *            请求参数
	 * @return 根据key获取请求参数的值
	 */
	protected String getReqString(String arg0) {
		return request.getParameter(arg0);
	}

	/**
	 * 获取请求参数 ， 返回类型为 Integer
	 * 
	 * @author lizx
	 * @date 2017年2月16日下午3:54:28
	 * @param arg0
	 *            请求参数
	 * @return 根据key获取请求参数的值
	 */
	protected Integer getReqInt(String arg0) {
		String param = request.getParameter(arg0);
		return StringUtils.isNumber(param) ? Integer.valueOf(param) : 0;
	}

	public static Integer getReqInt(String arg0, HttpServletRequest request) {
		String param = request.getParameter(arg0);
		return StringUtils.isNumber(param) ? Integer.valueOf(param) : 0;
	}

	/**
	 * 获取请求参数 ， 返回类型为 Long
	 * 
	 * @author lizx
	 * @date 2017年2月16日下午3:54:28
	 * @param arg0
	 *            请求参数
	 * @return 根据key获取请求参数的值
	 */
	protected Long getReqLong(String arg0) {
		String param = request.getParameter(arg0);
		if (StringUtils.isNumber(param)) {
			return Long.valueOf(param);
		} else {
			return 0L;
		}
	}
	
	/**
	 * 判断空和数字类型String参数校验
	 * 
	 * @param arg0 String
	 */
	protected void paramValidateNumber(String arg0) {
		if (org.apache.commons.lang3.StringUtils.isNotBlank(arg0)) {
			if (!StringUtils.isNumber(arg0)) {
//				throw new ParamInvalidException();
			}
		}
	}

	protected void printMsg(String message) {
		response.setHeader("Content-Type", "text/html");
		response.setCharacterEncoding("UTF-8");
		try {
			PrintWriter out = response.getWriter();
			out.write(message);
			out.flush();
			out.close();
		} catch (IOException e) {
			logger.error("------>printMsg error:" + e.getMessage(), e);
		}
	}
}
